<?php
/**
 * @package Application_Auth
 * @author Cezar Zaleski e Reginaldo Júnior
 * @version 1.0.0
 */

/**
 *
 * @namespace
 */
namespace Application\Auth;
/**
 * @uses Doctrine\ORM\EntityManager
 * @uses Zend\Authentication\Adapter\AdapterInterface
 * @uses Zend\Authentication\Result 
 */
use Doctrine\ORM\EntityManager;
use Zend\Authentication\Adapter\AdapterInterface;
use Zend\Authentication\Result;
/**
 * Adaptador para autenticação
 */
class Adapter implements AdapterInterface {
    /**
     * EntityManager utilizada para persistência
     * @var EntityManager
     */
    protected $em;
    /**
     * Login do usuário
     * @var string
     */
    protected $noLogin;
    /**
     * Senha do usuário
     * @var string
     */
    protected $noSenha;
	/**
	 * Construtor
	 * @access public
	 * @param EntityManager $em
	 * @return void
	 */
    public function __construct(EntityManager $em) {
        $this->em = $em;
    }
    /**
     * Get noLogin
     * @access public
     * @return string
     */
    public function getNoLogin() {
        return $this->noLogin;
    }
	/**
	 * Set noLogin
	 * @param string $noLogin
	 * @return Adapter
	 */
    public function setNoLogin($noLogin) {
        $this->noLogin = $noLogin;
        return $this;
    }
	/**
	 * Get noSenha
	 * @access public
	 * @return string
	 */
    public function getNoSenha() {
        return $this->noSenha;
    }
	/**
	 * Set noSenha
	 * @param string $noSenha
	 * @return Adapter
	 */
    public function setNoSenha($noSenha) {
        $this->noSenha = $noSenha;
        return $this;
    }
    /**
     * Autentica Usuário.
     * @return \Zend\Authentication\Result
     */
    public function authenticate() {
        $repository = $this->em->getRepository("Application\Entity\Usuario");
        $user = $repository->findByUsuarioAndSenha($this->getNoLogin(), $this->getNoSenha());
        if ($user) {
            return new Result(Result::SUCCESS, 
                    array('user' => $this->_populateIdentity($user)), 
                    array('OK')
            );
        } else {
            return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, array());
        }
    }
    /**
     * Popula Objetos que estarão na sessão;
     * @param \Application\Entity\Usuario $obj
     * @return \stdClass
     */
    private function _populateIdentity($obj) {
        $objSessao = new \stdClass();
        $objSessao->idUsuario = $obj->getIdUsuario()->getIdPessoaFisica()->getidPessoa();
        $objSessao->noUsuario = $obj->getNoUsuario();
        $objSessao->noPessoa = $obj->getIdUsuario()->getIdPessoaFisica()->getNoPessoa();
        $objSessao->idPerfil = $obj->getIdPerfil()->getIdPerfil();
        $objSessao->noPerfil = $obj->getIdPerfil()->getNoPerfil();
        $dtUltLog = new \DateTime('now');
        if($obj->getDtUltVisita()){
        	$dtUltLog = $obj->getDtUltVisita();
        }
        $objSessao->dtUltLog = $dtUltLog->format('d/m/Y H:i:s');
        $objSessao->inicioSessao = time();
        return $objSessao;
    }
}
